﻿using BrightIdeasSoftware;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormTest
{
    public partial class Form3 : Form
    {
        private DataListView _dataListView;
        private DataTable _productTable;
        // 列宽比例配置（总和建议为100，代表100%宽度）
        private readonly float[] _columnWidthRatios = { 10,10, 20, 20, 20, 20 }; // 五列的宽度占比
        public Form3()
        {
            InitializeComponent();
            InitializeDataListView();
            CreateSampleData();
            BindData();
            // 初始调整列宽
            AdjustColumnWidths();
        }
        // 初始化DataListView
        private void InitializeDataListView()
        {
            // 创建控件并设置基本属性
            _dataListView = new DataListView
            {
                Dock = DockStyle.Fill,
                View = View.Details,
                FullRowSelect = true,
                GridLines = true,
                //AllowEditing = true, // 允许单元格编辑
                // AllowColumnReordering = true,
                UseAlternatingBackColors = true,
                RowHeight = 50,
                ShowGroups = false,
                //AutoGenerateColumns = true,
                UseCellFormatEvents = true,
                //CellEditActivation = ObjectListView.CellEditActivateMode.SingleClick
            };

            // 手动定义列（也可使用AutoGenerateColumns自动生成）
            //_dataListView.Columns.AddRange(new OLVColumn[]
            //{
            //    new OLVColumn("ID", "ProductId") { Width = 80, IsEditable = false }, // 不可编辑
            //    new OLVColumn("产品名称", "Name") { Width = 200 },
            //    new OLVColumn("类别", "Category") { Width = 120 },
            //    new OLVColumn("价格", "Price")
            //    {
            //        Width = 100,
            //        AspectToStringConverter = val => $"{Convert.ToDecimal(val):C2}", // 格式化货币
            //        TextAlign = HorizontalAlignment.Right
            //    },
            //    new OLVColumn("库存", "Stock") { Width = 80 },
            //    new OLVColumn("状态", "IsActive")
            //    {
            //        Width = 80,
            //        AspectToStringConverter = val => (bool)val ? "在售" : "下架",
            //        //CellFormatter = (cell) =>
            //        //{
            //        //    // 根据状态设置颜色
            //        //    cell.SubItem.ForeColor = (bool)cell.RowObject["IsActive"] ? Color.Green : Color.Gray;
            //        //}
            //    }
            //});
            // 添加列（数量需与_columnWidthRatios对应）
            _dataListView.Columns.AddRange(new OLVColumn[]
            {
                new OLVColumn("ID", "Id"){ IsEditable=false},
                new OLVColumn("名称", "Name"){ IsEditable=false},
                new OLVColumn("类别", "Category"){ IsEditable=true},
                new OLVColumn("价格", "Price"){ IsEditable=false},
                new OLVColumn("库存", "Stock"){ IsEditable=false},
                new OLVColumn("状态","IsActive"){ IsEditable=false}
            });


            //_dataListView.Columns[""].
            // 添加事件：编辑后自动保存
            _dataListView.CellEditFinishing += (s, e) =>
            {
                // 编辑完成后，数据已自动同步到DataTable
                MessageBox.Show($"已更新1111111: {e.Column.Text} = {e.NewValue}");
            };

            // 添加到窗体
            Controls.Add(_dataListView);
            _dataListView.Resize += _dataListView_Resize;// 窗口大小变化时重新调整
        }

        private void _dataListView_Resize(object sender, EventArgs e)
        {
            AdjustColumnWidths();
            //throw new NotImplementedException();
        }
        // 关键：调整列宽以充满整个控件宽度
        private void AdjustColumnWidths()
        {
            if (_dataListView.Columns.Count == 0) return;

            // 计算可用宽度（减去滚动条宽度和边框）
            int availableWidth = _dataListView.ClientSize.Width -
                                SystemInformation.VerticalScrollBarWidth - 4;

            if (availableWidth <= 0) return;

            // 按比例分配宽度
            float totalRatio = 0;
            foreach (var ratio in _columnWidthRatios)
                totalRatio += ratio;

            // 前n-1列按比例分配
            for (int i = 0; i < _dataListView.Columns.Count - 1; i++)
            {
                float ratio = _columnWidthRatios[i] / totalRatio;
                _dataListView.Columns[i].Width = (int)(availableWidth * ratio);
            }

            // 最后一列填充剩余空间（处理计算误差）
            int lastColumnIndex = _dataListView.Columns.Count - 1;
            int remainingWidth = availableWidth;
            for (int i = 0; i < lastColumnIndex; i++)
                remainingWidth -= _dataListView.Columns[i].Width;

            _dataListView.Columns[lastColumnIndex].Width = Math.Max(remainingWidth, 50); // 最小宽度50
        }

        // 创建示例DataTable数据
        private void CreateSampleData()
        {
            // 创建DataTable结构
            _productTable = new DataTable("Products");
            _productTable.Columns.AddRange(new DataColumn[]
            {
                new DataColumn("ProductId", typeof(int)),
                new DataColumn("Name", typeof(string)),
                new DataColumn("Category", typeof(string)),
                new DataColumn("Price", typeof(decimal)),
                new DataColumn("Stock", typeof(int)),
                new DataColumn("IsActive", typeof(bool))
            });

            // 添加示例数据
            _productTable.Rows.Add(1, "笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑笔记本电脑", "电子产品", 5999.99, 20, true);
            _productTable.Rows.Add(2, "机械键盘", "电脑配件", 299.50, 50, true);
            _productTable.Rows.Add(3, "无线鼠标", "电脑配件", 129.99, 30, true);
            _productTable.Rows.Add(4, "CRT显示器", "电子产品", 899.00, 5, false);
        }
        // 绑定DataTable到DataListView
        private void BindData()
        {
            // 方式1：直接绑定DataTable
            _dataListView.DataSource = _productTable;

            // 方式2：绑定DataView（支持筛选）
            // var view = new DataView(_productTable);
            // view.RowFilter = "Category = '电脑配件'"; // 筛选条件
            // _dataListView.DataSource = view;
        }
    }
}
